#include <iostream>
#include <typeinfo>
#include <string>
using namespace std;
int strToint(string s)
{
    // 字符串转整数
    int ans = 0;
    for (int i = 0; i < s.size(); i++)
        ans = ans * 10 + s[i] - '0';
    return ans;
}
int main()
{
    //当一个STRING类型和其他任何一种基本类型相加时, 基本类型自动转为STRING类型....
    string s;
    int temp;
    temp = 5;
    s = temp + "c"; // 什么都没输出，因为这是字符串，而不是字符，就不ASCLL码的相加了
    cout << s << endl;
    s = temp + 'c'; // 等于在c的ASCLL码上加5
    cout << s << endl;
    cout << s.npos << endl; // npos是一个常数，表示size_t的最大值。许多容器都提供这个东西，用来表示不存在的位置，类型一般是std::container_type::size_type。
    s = "h" + s;
    cout << s << endl; // 两个字符串相加,"hh"

    // 增删改查
    string s1 = "hello";
    s.insert(1, s1);
    cout << s << endl; // 插入，结果为"hhelloh"
    s.erase(0, 1);     // 从第0个位置开始，删除一个字符，如果不指定就是从0开始把后面的全部删除了

    cout << s << endl;                 // 删除，结果为"helloh"
    s.erase(s.begin() + s.size() - 1); // 删除指定下标的位置，这里是把最后一个元素删除
    cout << s << endl;                 // 结果为"hello"

    string s2 = s.substr(0, 3); // 提取，从位置0开始，提取3个元素
    cout << s2 << endl          // 结果为"hel"和"hello"
         << s << endl;

    string s3 = "llo";
    cout << s.find(s3, 0) << endl; // 查找，在s中查找s3，开始位置为0，返回第一个找到的位置下标，这里结果是"2"

    cout << s.rfind(s3, 2) << endl; // 查找，和find不同的是，rfind查找的结束位置是2，这里结果也是"2"

    string s4 = "ceo";
    cout << s.find_first_of(s4) << endl; // 查找,查找s4和s共同具有的字符在字符串中首次出现的位置,这里返回的是"1"

    // 关于类型的转换
    string sss = "helo";
    cout << typeid(s).name() << endl;
    for (size_t i = 0; i < sss.size(); i++)
    {
        cout << typeid(sss[i]).name() << endl;
    }
    string ss;
    ss = &s[1]; // char 通过赋值即可直接转换
    cout << typeid(ss).name() << endl;

    int a = 12;
    ss = a; // int通过赋值也能直接转换,但不会显示出来
    cout << typeid(ss).name() << endl;
    cout << ss << endl; // 这里输出为空，什么都没有

    string s = "121";
    int temp = 6;
    // 迭代器一次只能访问一个，所以char能用迭代器，string不行
    s.insert(s.begin(), '2'); // char插入要用迭代器
    cout << s << endl;
    string s_temp = to_string(temp);
    s.insert(0, s_temp); // string插入要用下标
    cout << s << endl;

    int ans = strToint("1234"); // 字符串转整数
    cout << ans;
}